#include "main.h"
#include "system.h"

void  ALLGPIO_Initial(void)
{
   GPIO_InitTypeDef GPIO_InitStruct = {0};

   
   __HAL_RCC_GPIOA_CLK_ENABLE();	
   __HAL_RCC_GPIOB_CLK_ENABLE();
   __HAL_RCC_GPIOC_CLK_ENABLE();

    
	/*GPIO_InitStruct.Pin 	=  Debug_TX_PIN;
	GPIO_InitStruct.Mode 	= GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull 	= GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(Debug_TX_PORT, &GPIO_InitStruct);
	Debug_TX_GPIO_LOW;*/


	GPIO_InitStruct.Pin 	=  LCD_CS_PIN;
	GPIO_InitStruct.Mode 	= GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull 	= GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(LCD_CS_PORT, &GPIO_InitStruct);  

	GPIO_InitStruct.Pin   =  LCD_RES_PIN;
	GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull  = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(LCD_RES_PORT, &GPIO_InitStruct);  

	GPIO_InitStruct.Pin   =  LCD_A0_PIN;
	GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull  = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(LCD_A0_PORT, &GPIO_InitStruct);  


	GPIO_InitStruct.Pin   =  SDA_PIN;
	GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull  = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(SDA_PORT, &GPIO_InitStruct);  

	GPIO_InitStruct.Pin   =  SCL_PIN;
	GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull  = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(SCL_PORT, &GPIO_InitStruct);  

#if 1
	  GPIO_InitStruct.Pin 	= Led_Run_PIN;
	  GPIO_InitStruct.Mode 	= GPIO_MODE_OUTPUT_PP;
	  GPIO_InitStruct.Pull 	= GPIO_NOPULL;
	  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	  HAL_GPIO_Init(Led_Run_PORT, &GPIO_InitStruct);

	  GPIO_InitStruct.Pin 	= Led_Alarm_PIN;
	  GPIO_InitStruct.Mode 	= GPIO_MODE_OUTPUT_PP;
	  GPIO_InitStruct.Pull 	= GPIO_NOPULL;
	  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	  HAL_GPIO_Init(Led_Alarm_PORT, &GPIO_InitStruct);

	  GPIO_InitStruct.Pin 	= Led_Malfunction_PIN;
	  GPIO_InitStruct.Mode 	= GPIO_MODE_OUTPUT_PP;
	  GPIO_InitStruct.Pull 	= GPIO_NOPULL;
	  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	  HAL_GPIO_Init(Led_Malfunction_PORT, &GPIO_InitStruct);	

	  GPIO_InitStruct.Pin 	= Led_MissPhase_PIN;
	  GPIO_InitStruct.Mode 	= GPIO_MODE_OUTPUT_PP;
	  GPIO_InitStruct.Pull 	= GPIO_NOPULL;
	  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	  HAL_GPIO_Init(Led_MissPhase_PORT, &GPIO_InitStruct);		  
#endif


		GPIO_InitStruct.Pin   =  	Menu_Key_PIN;
		GPIO_InitStruct.Mode  = 	GPIO_MODE_IT_FALLING;
		GPIO_InitStruct.Pull  = 	GPIO_NOPULL;
		GPIO_InitStruct.Speed = 	GPIO_SPEED_FREQ_HIGH;
		HAL_GPIO_Init(Menu_Key_PORT, &GPIO_InitStruct); 

		GPIO_InitStruct.Pin   =   Move_Key_PIN;
		GPIO_InitStruct.Mode  =   GPIO_MODE_IT_FALLING;
		GPIO_InitStruct.Pull  =   GPIO_NOPULL;
		GPIO_InitStruct.Speed =   GPIO_SPEED_FREQ_HIGH;
		HAL_GPIO_Init(Move_Key_PORT, &GPIO_InitStruct); 

		GPIO_InitStruct.Pin   =   Selet_Key_PIN;
		GPIO_InitStruct.Mode  =   GPIO_MODE_IT_FALLING;
		GPIO_InitStruct.Pull  =   GPIO_NOPULL;
		GPIO_InitStruct.Speed =   GPIO_SPEED_FREQ_HIGH;
		HAL_GPIO_Init(Selet_Key_PORT, &GPIO_InitStruct); 
		
 		HAL_NVIC_SetPriority(EXTI2_3_IRQn, 6, 0);	
 		HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);  
		
 		HAL_NVIC_SetPriority(EXTI0_1_IRQn, 7, 0); 
 		HAL_NVIC_EnableIRQ(EXTI0_1_IRQn);


		/*GPIO_InitStruct.Pin 	= CollectBorad_PIN;
		GPIO_InitStruct.Mode 	= GPIO_MODE_OUTPUT_PP;
		GPIO_InitStruct.Pull 	= GPIO_NOPULL;
		GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
		HAL_GPIO_Init(CollectBorad_PORT, &GPIO_InitStruct);	
		HAL_GPIO_WritePin(CollectBorad_PORT,CollectBorad_PIN,0);*/


	  	GPIO_InitStruct.Pin 	= BK_PW_EN_PIN;
	  	GPIO_InitStruct.Mode 	= GPIO_MODE_OUTPUT_PP;
	  	GPIO_InitStruct.Pull 	= GPIO_NOPULL;
	  	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	  	HAL_GPIO_Init(BK_PW_EN_PORT, &GPIO_InitStruct);	
	  	BK_PW_ENABLE;

}

void SetSdaInput(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin   =  SDA_PIN;
	GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull  = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(SDA_PORT, &GPIO_InitStruct);  

}


void EXTI2_3_IRQHandler(void)
{	
	HAL_GPIO_EXTI_IRQHandler(Selet_Key_PIN);	
	HAL_GPIO_EXTI_IRQHandler(Move_Key_PIN);
}

void EXTI0_1_IRQHandler(void)
{
	

	HAL_GPIO_EXTI_IRQHandler(Menu_Key_PIN);
	
}

uint32  keycnt=0;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if (Menu_Key_Status == 0)
	{
		
		KeyStatu.Key_Int=Menu_Key_Detct;
	}
	if (Move_Key_Status== 0)
	{
		KeyStatu.Key_Int=Move_Key_Detct;
	}	
	if (Selet_Key_Status== 0)
	{
		KeyStatu.Key_Int=Selet_Key_Detct;
	}	
	
}